#include "stdafx.h"
#include "S_Material.h"



/*void f_set单色材质GPU参数布局(S_着色* shader, S_结构对象指针 dstSet, S_板载缓存** 参数元素, uint16 num, S_纹理** 纹理参数, uint16 texNum) {

}*/



/*static void f_updateGPU参数布局_单色线(S_材质* mat, S_GPU参数布局& layout, uint16 网格属性缓存槽数量) {
	S_单色线材质* sm = (S_单色线材质*)(mat);

	uint16 num = 网格属性缓存槽数量 + 1;
	if (num != layout.m_参数数量) f_alloc缓存槽(&layout, num);
	//if (纹理槽数量) f_alloc缓存槽(&layout, 纹理槽数量);
	layout.m_参数槽[网格属性缓存槽数量 + 0] = sm->m_Color;
}

S_单色线材质::S_单色线材质(S_设备环境& ctx) {
	//m_参数数量 = 0;
	//m_纹理数量 = 0;

	m_Color = f_create板载缓存(ctx, sizeof(uint32), E_板载缓存类型::e_SSBO);

	f_buf_fill板载缓存<uint32>(m_Color, { 0xffffffff }, E_板载缓存类型::e_SSBO);


	//mf_GPU参数布局更新 = f_setGPU参数布局;
	S_线管创建参数 线管参数({ 1024, 1024 });
	线管参数.m_绘制方式 = E_绘制方式::e_画连续线段;
	线管参数.m_填充模式 = E_填充模式::e_填充线;
	线管参数.m_采样 = ctx.m_采样数;

	S_着色器创建配置 图元配置;

	图元配置 = {
		{
			{0, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{1, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
			{2, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
		},
		{
			{0,sizeof(vec3),0,E_数据格式::e_F_RGB},
		},
		{
			{"D:/U/Project/engine/资产/着色/compiled/单色线绘制_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{"D:/U/Project/engine/资产/着色/compiled/纯色面绘制_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};

	f_df_创建材质着色器(ctx, this, 图元配置, 线管参数);

	mf_GPU材质槽更新 = f_updateGPU参数布局_单色线;
	//m_Shader->f_alloc参数设置(&m_GPU参数set);

}

void S_单色线材质::f_set颜色(S_RGBA8UI color, uint32 实例ID) {
	m_Color->f_map();
	((uint32*)(m_Color->m_mappedPtr))[实例ID] = f_PackData4X8(color);
	m_Color->f_unmap();
}












static void f_updateGPU参数布局_单色点(S_材质* mat, S_GPU参数布局& layout, uint16 网格属性缓存槽数量) {
	S_单色线材质* sm = (S_单色线材质*)(mat);

	uint16 num = 网格属性缓存槽数量;
	if (num != layout.m_参数数量) f_alloc缓存槽(&layout, num);
}

S_单色点材质::S_单色点材质(S_设备环境& ctx) {
	//m_参数数量 = 0;
	//m_纹理数量 = 0;


	S_线管创建参数 线管参数({ 1024, 1024 });
	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充点;
	线管参数.m_采样 = ctx.m_采样数;

	S_着色器创建配置 图元配置;

	图元配置 = {
		{
			{0, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{1, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
		},
		{
			{0,sizeof(vec3),0,E_数据格式::e_F_RGB},
			{0,sizeof(uint32),0,E_数据格式::e_UI_R32},
		},
		{
			{"D:/U/Project/engine/资产/着色/compiled/单色顶点绘制_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{"D:/U/Project/engine/资产/着色/compiled/纯色面绘制_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};

	//m_Shader = f_create着色(ctx, 图元配置);
	//m_Pipeline = f_create线管(ctx, *m_Shader, 线管参数);

	f_df_创建材质着色器(ctx, this, 图元配置, 线管参数);
	mf_GPU材质槽更新 = f_updateGPU参数布局_单色点;
}*/











